package org.shj.algorithm;

/**
 * 给定几个数字，列出其全排列
 * 如： 123，则其全排列为： 123， 132， 213，231，312， 321
 *
 * 思路一： 每个数字均做为第一个数字时的排列组合，使用递归
 * 思路二： 假设原始数为 21543，则把其从字典序最小的序列（12345）开始，每次只
 *         取一个比当前序列稍大一点的序列，一直排到字典序最大的序列（54321），则所有的
 *         取值就是全部的排列组合。
 * 如何取比当前序列稍大一点的序列呢？步骤：
 *       1. 假设当前序列是 21543，
 *       2. 从最后面一位开始往前找，找出第一处不是降序的数字。此处 43，54 均为降序， 15不是，
 *          所以 1 为第一个要找的数，
 *       3. 找出 1 后面的数中最小的数，此例为 3
 *       4. 把 1 和 3 交换位置，然后把 3 后面的数字（541）按升序排序，得到 23145
 *       5. 则比 21543 稍大的排列是 23145
 * @author Shen Huang Jian
 * @date 2019-03-23 11:59
 */
public class FullArrange {

    public static void main(String[] args){

    }
}
